--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/plugin_manager.py dff83e198e78b84ec225e53ce3ab119f598b0a01 (dff83e19) Text, 65.86 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787shutil
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787threading
Tff7b72import T7ee787time
Tff7b72from T7ee787dataclasses Tff7b72import Te6edf3dataclassTb4b4b4, Te6edf3field
Tff7b72from T7ee787typing Tff7b72import Te6edf3AnyTb4b4b4, Te6edf3cast
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_guard Tff7b72import Tb4b4b4(
Te6edf3PLUGIN_ERROR_BUDGETTb4b4b4,
Te6edf3PLUGIN_ERROR_WINDOW_SECONDSTb4b4b4,
Te6edf3PluginSecurityErrorTb4b4b4,
Te6edf3normalize_asset_pathTb4b4b4,
Te6edf3safe_extract_zipTb4b4b4,
Te6edf3validate_invoke_payloadTb4b4b4,
Te6edf3validate_wasm_fileTb4b4b4,
Te6edf3validate_zip_bytesTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_integrity Tff7b72import Tb4b4b4(
Te6edf3INTEGRITY_TAMPER_MESSAGETb4b4b4,
Te6edf3compute_dir_integrity_hashTb4b4b4,
Te6edf3verify_dir_integrityTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_permissions Tff7b72import Tb4b4b4(
Te6edf3collect_network_endpointsTb4b4b4,
Te6edf3declared_permission_idsTb4b4b4,
Te6edf3deserialize_grantedTb4b4b4,
Te6edf3granted_allows_hookTb4b4b4,
Te6edf3granted_allows_managerTb4b4b4,
Te6edf3granted_allows_network_fetchTb4b4b4,
Te6edf3granted_allows_storageTb4b4b4,
Te6edf3normalize_granted_permissionsTb4b4b4,
Te6edf3normalize_network_modeTb4b4b4,
Te6edf3requires_network_fetchTb4b4b4,
Te6edf3serialize_grantedTb4b4b4,
Te6edf3validate_declared_permissionsTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_python_runtime Tff7b72import Tb4b4b4(
Te6edf3PluginPythonHostTb4b4b4,
Te6edf3PluginPythonRuntimeTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_security_scan Tff7b72import Te6edf3assess_plugin
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_signature Tff7b72import Tb4b4b4(
Te6edf3enrich_signature_with_trustTb4b4b4,
Te6edf3require_valid_signatureTb4b4b4,
Te6edf3verify_dir_signatureTb4b4b4,
Te6edf3verify_wasm_signatureTb4b4b4,
Te6edf3verify_zip_signatureTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_trusted_publishers Tff7b72import Tb4b4b4(
Te6edf3add_user_trusted_publisherTb4b4b4,
Te6edf3init_trusted_publishers_integrityTb4b4b4,
Te6edf3list_trusted_publishersTb4b4b4,
Te6edf3lookup_trusted_publisher_in_storageTb4b4b4,
Te6edf3remove_user_trusted_publisherTb4b4b4,
Te6edf3user_trusted_publishers_tamperedTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_wasm_bundle Tff7b72import Tb4b4b4(
Te6edf3is_wasm_bytesTb4b4b4,
Te6edf3parse_wasm_bundleTb4b4b4,
Te6edf3validate_embedded_bundleTb4b4b4,
Te6edf3write_wasm_bundleTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787path_utils Tff7b72import Te6edf3is_path_within_dir
Te6edf3SUPPORTED_API_VERSION Tff7b72= T79c0ff1
Te6edf3PLUGIN_ID_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^[a-zA-Z0-9][a-zA-Z0-9._-]Ta5d6ff{Ta5d6ff0,127}$Ta5d6ff"Tb4b4b4)
Te6edf3MINIMAL_PLUGIN_WAT Tff7b72= Ta5d6ff"""
Ta5d6ff(module
Ta5d6ff (import Ta5d6ff"Ta5d6ffhostTa5d6ff"Ta5d6ff Ta5d6ff"Ta5d6fflogTa5d6ff"Ta5d6ff (func (param i32 i32)))
Ta5d6ff (memory (export Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Ta5d6ff) 1)
Ta5d6ff (func (export Ta5d6ff"Ta5d6ffon_hookTa5d6ff"Ta5d6ff) (param i32 i32) (result i32)
Ta5d6ff i32.const 0
Ta5d6ff )
Ta5d6ff (func (export Ta5d6ff"Ta5d6ffinvokeTa5d6ff"Ta5d6ff) (param i32 i32 i32) (result i32)
Ta5d6ff i32.const 0
Ta5d6ff )
Ta5d6ff)
Ta5d6ff"""Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tf0883e@dataclass
Tff7b72class T56d364PluginRecordTb4b4b4:
Tffa657idTb4b4b4: Tffa657str
Te6edf3versionTb4b4b4: Tffa657str
Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]
Te6edf3enabledTb4b4b4: Tffa657bool
Te6edf3install_pathTb4b4b4: Tffa657str
Te6edf3auto_disabled_reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Te6edf3granted_permissionsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Te6edf3announce_handlersTb4b4b4: Tffa657listTb4b4b4[Te6edf3AnyTb4b4b4] Tff7b72= Te6edf3fieldTb4b4b4(Te6edf3default_factoryTff7b72=Tffa657listTb4b4b4)
Te6edf3error_countTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Te6edf3last_error_atTb4b4b4: Tffa657float Tff7b72= T79c0ff0.0
Te6edf3integrity_hashTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Te6edf3tamperedTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Te6edf3signatureTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72class T56d364PluginManagerTb4b4b4:
T8b949e"""Discover, install, and execute MeshChatX plugins."""
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4, Te6edf3appTb4b4b4: Te6edf3Any Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstorage_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3storage_dirTb4b4b4, Ta5d6ff"Ta5d6ffpluginsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstalled_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff"Ta5d6ffinstalledTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate_db_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin_state.dbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ff_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffRLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3PluginRecordTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_python_runtime Tff7b72= Te6edf3PluginPythonRuntimeTb4b4b4(Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_init_state_dbTb4b4b4(Tb4b4b4)
Te6edf3init_trusted_publishers_integrityTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_load_installed_pluginsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_init_state_dbTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
CREATE TABLE IF NOT EXISTS plugin_storage (
plugin_id TEXT NOT NULL,
storage_key TEXT NOT NULL,
storage_value TEXT NOT NULL,
PRIMARY KEY (plugin_id, storage_key)
)
"""Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
CREATE TABLE IF NOT EXISTS plugin_state (
plugin_id TEXT PRIMARY KEY,
enabled INTEGER NOT NULL DEFAULT 0,
auto_disabled_reason TEXT,
granted_permissions TEXT,
integrity_hash TEXT,
tampered INTEGER NOT NULL DEFAULT 0
)
"""Tb4b4b4,
Tb4b4b4)
Te6edf3columns Tff7b72= Tb4b4b4{
Te6edf3rowTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72for Te6edf3row Tff7b72in Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffPRAGMA table_info(plugin_state)Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72if Ta5d6ff"Ta5d6ffgranted_permissionsTa5d6ff" Tff7b72not Tff7b72in Te6edf3columnsTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffALTER TABLE plugin_state ADD COLUMN granted_permissions TEXTTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffintegrity_hashTa5d6ff" Tff7b72not Tff7b72in Te6edf3columnsTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE plugin_state ADD COLUMN integrity_hash TEXTTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fftamperedTa5d6ff" Tff7b72not Tff7b72in Te6edf3columnsTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffALTER TABLE plugin_state ADD COLUMN tampered INTEGER NOT NULL DEFAULT 0Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
CREATE TABLE IF NOT EXISTS plugin_settings (
setting_key TEXT PRIMARY KEY,
setting_value TEXT NOT NULL
)
"""Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_appTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4: Te6edf3AnyTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72def Td2a8ff_plugins_runtime_enabledTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffapp Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tffa657boolTb4b4b4(Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffplugins_enabledTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_require_runtime_enabledTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugins are disabledTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_load_wasmtimeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_wasmtime
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787wasmtime
Tff7b72except Tf85149ImportError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasmtime is required for backend pluginsTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72= Te6edf3wasmtime
Tff7b72return Te6edf3wasmtime
Tff7b72def Td2a8ff_load_installed_pluginsTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72for Te6edf3entry Tff7b72in Tffa657sortedTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3plugin_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3entryTb4b4b4)
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plugin_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Te6edf3manifest Tff7b72= Tff7b72selfTff7b72.Td2a8ff_validate_manifestTb4b4b4(Te6edf3manifestTb4b4b4)
Tb4b4b4(
Te6edf3enabledTb4b4b4,
Te6edf3auto_disabled_reasonTb4b4b4,
Te6edf3grantedTb4b4b4,
Te6edf3integrity_hashTb4b4b4,
Te6edf3tamperedTb4b4b4,
Tb4b4b4) Tff7b72= Tff7b72selfTff7b72.Td2a8ff_read_plugin_stateTb4b4b4(Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3declared Tff7b72= Te6edf3declared_permission_idsTb4b4b4(Te6edf3manifestTb4b4b4)
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3granted Tff7b72= Tffa657listTb4b4b4(Te6edf3declaredTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3granted Tff7b72= Te6edf3normalize_granted_permissionsTb4b4b4(Te6edf3declaredTb4b4b4, Te6edf3grantedTb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_dir_signatureTb4b4b4(Te6edf3plugin_dirTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)
Te6edf3record Tff7b72= Te6edf3PluginRecordTb4b4b4(
Tffa657idTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3versionTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3manifestTff7b72=Te6edf3manifestTb4b4b4,
Te6edf3enabledTff7b72=Te6edf3enabledTb4b4b4,
Te6edf3install_pathTff7b72=Te6edf3plugin_dirTb4b4b4,
Te6edf3auto_disabled_reasonTff7b72=Te6edf3auto_disabled_reasonTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3grantedTb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3integrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Te6edf3tamperedTb4b4b4,
Te6edf3signatureTff7b72=Te6edf3signatureTff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3enabled Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ff_verify_integrity_on_loadTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4] Tff7b72= Te6edf3record
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFailed to load plugin from Tffd700{Te6edf3plugin_dirTffd700}Ta5d6ff: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_read_plugin_stateTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657boolTb4b4b4, Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4, Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Tffa657boolTb4b4b4]Tb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3row Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
SELECT enabled, auto_disabled_reason, granted_permissions,
integrity_hash, tampered
FROM plugin_state WHERE plugin_id = ?
"""Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Tff7b72return Tff7b72FalseTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72False
Tff7b72return Tb4b4b4(
Tffa657boolTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3rowTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3deserialize_grantedTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3rowTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Tffa657boolTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_write_plugin_stateTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3enabledTb4b4b4: Tffa657boolTb4b4b4,
Te6edf3auto_disabled_reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3granted_permissionsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3integrity_hashTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3tamperedTb4b4b4: Tffa657bool Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
INSERT INTO plugin_state (
plugin_id, enabled, auto_disabled_reason, granted_permissions,
integrity_hash, tampered
)
VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT(plugin_id) DO UPDATE SET
enabled = excluded.enabled,
auto_disabled_reason = excluded.auto_disabled_reason,
granted_permissions = COALESCE(
excluded.granted_permissions,
plugin_state.granted_permissions
),
integrity_hash = COALESCE(
excluded.integrity_hash,
plugin_state.integrity_hash
),
tampered = COALESCE(excluded.tampered, plugin_state.tampered)
"""Tb4b4b4,
Tb4b4b4(
Te6edf3plugin_idTb4b4b4,
T79c0ff1 Tff7b72if Te6edf3enabled Tff7b72else T79c0ff0Tb4b4b4,
Te6edf3auto_disabled_reasonTb4b4b4,
Tff7b72None
Tff7b72if Te6edf3granted_permissions Tff7b72is Tff7b72None
Tff7b72else Te6edf3serialize_grantedTb4b4b4(Te6edf3granted_permissionsTb4b4b4)Tb4b4b4,
Te6edf3integrity_hashTb4b4b4,
Tff7b72None Tff7b72if Te6edf3tampered Tff7b72is Tff7b72None Tff7b72else Tb4b4b4(T79c0ff1 Tff7b72if Te6edf3tampered Tff7b72else T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_validate_manifestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3manifestTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin manifest must be an objectTa5d6ff"Tb4b4b4)
Te6edf3plugin_id Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3plugin_idTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3PLUGIN_ID_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3plugin_idTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin id is invalidTa5d6ff"Tb4b4b4)
Te6edf3version Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3versionTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3versionTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin version is requiredTa5d6ff"Tb4b4b4)
Te6edf3api_version Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffapiVersionTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3api_version Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin apiVersion is requiredTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3parsed_api_version Tff7b72= Tffa657intTb4b4b4(Te6edf3api_versionTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin apiVersion is invalidTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3parsed_api_version Tff7b72!= Te6edf3SUPPORTED_API_VERSIONTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffunsupported apiVersion (expected Tffd700{Te6edf3SUPPORTED_API_VERSIONTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3backend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3backend Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3backendTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin backend must be an objectTa5d6ff"Tb4b4b4)
Te6edf3entry Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin backend.entry is requiredTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3normalize_asset_pathTb4b4b4(Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Te6edf3PluginSecurityError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffplugin backend.entry is invalid: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3backend_type Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffwasmTa5d6ff"
Tff7b72if Te6edf3backend_type Tff7b72not Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffwasmTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin backend.type must be wasm or pythonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657strTb4b4b4(Te6edf3entryTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.pyTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3backend_type Tff7b72== Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpython backend entry must be a .py fileTa5d6ff"Tb4b4b4)
Te6edf3validate_declared_permissionsTb4b4b4(Te6edf3manifestTb4b4b4)
Tff7b72return Te6edf3manifest
Tff7b72def Td2a8fflist_pluginsTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3rows Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3record Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3rowsTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4)
Te6edf3rowsTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3itemTb4b4b4: Te6edf3itemTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3rows
Tff7b72def Td2a8ffget_pluginTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ff_public_plugin_viewTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifest
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3declared Tff7b72= Te6edf3declared_permission_idsTb4b4b4(Te6edf3manifestTb4b4b4)
Te6edf3granted Tff7b72= Te6edf3recordTff7b72.Td2a8ffgranted_permissions
Tff7b72if Te6edf3granted Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3granted Tff7b72= Tffa657listTb4b4b4(Te6edf3declaredTb4b4b4)
Te6edf3endpoints Tff7b72= Te6edf3collect_network_endpointsTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Te6edf3backend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3backend_type Tff7b72= Tff7b72None
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3backendTb4b4b4, Tffa657dictTb4b4b4) Tff7b72and Te6edf3backendTb4b4b4:
Te6edf3backend_type Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffwasmTa5d6ff"
Te6edf3signature Tff7b72= Tb4b4b4(
Te6edf3recordTff7b72.Td2a8ffsignature
Tff7b72or Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_dir_signatureTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4)
Tb4b4b4)
Te6edf3assessment Tff7b72= Te6edf3assess_pluginTb4b4b4(
Te6edf3manifestTb4b4b4,
Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4,
Te6edf3signatureTff7b72=Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_dir_signatureTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffversionTb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4,
Ta5d6ff"Ta5d6ffauto_disabled_reasonTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffauto_disabled_reasonTb4b4b4,
Ta5d6ff"Ta5d6ffmanifestTa5d6ff"Tb4b4b4: Te6edf3manifestTb4b4b4,
Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4: Te6edf3permissionsTb4b4b4,
Ta5d6ff"Ta5d6ffdeclared_permissionsTa5d6ff"Tb4b4b4: Te6edf3declaredTb4b4b4,
Ta5d6ff"Ta5d6ffgranted_permissionsTa5d6ff"Tb4b4b4: Te6edf3grantedTb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_endpointsTa5d6ff"Tb4b4b4: Te6edf3endpointsTb4b4b4,
Ta5d6ff"Ta5d6ffrequires_network_fetchTa5d6ff"Tb4b4b4: Te6edf3requires_network_fetchTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3endpointsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffcontributesTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontributesTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffhas_frontendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffhas_backendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffbackend_typeTa5d6ff"Tb4b4b4: Te6edf3backend_typeTb4b4b4,
Ta5d6ff"Ta5d6ffsignatureTa5d6ff"Tb4b4b4: Te6edf3signatureTb4b4b4,
Ta5d6ff"Ta5d6fftamperedTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3recordTff7b72.Td2a8fftamperedTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsecurity_findingsTa5d6ff"Tb4b4b4: Tb4b4b4[Te6edf3itemTff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3item Tff7b72in Te6edf3assessmentTff7b72.Td2a8fffindingsTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffrisk_levelTa5d6ff"Tb4b4b4: Te6edf3assessmentTff7b72.Td2a8ffrisk_levelTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_build_preview_from_directoryTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3source_dirTb4b4b4: Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3signature_overrideTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3embeddedTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657bytesTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3source_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin.json not foundTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Tff7b72selfTff7b72.Td2a8ff_validate_manifestTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)Tb4b4b4)
Te6edf3declared Tff7b72= Te6edf3declared_permission_idsTb4b4b4(Te6edf3manifestTb4b4b4)
Te6edf3endpoints Tff7b72= Te6edf3collect_network_endpointsTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3source_dirTb4b4b4)
Te6edf3network_mode Tff7b72= Te6edf3normalize_network_modeTb4b4b4(
Tb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3signature Tff7b72= Te6edf3signature_override Tff7b72or Te6edf3verify_dir_signatureTb4b4b4(Te6edf3source_dirTb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(Te6edf3signatureTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4)
Te6edf3assessment Tff7b72= Te6edf3assess_pluginTb4b4b4(
Te6edf3manifestTb4b4b4,
Te6edf3source_dirTb4b4b4,
Te6edf3embeddedTff7b72=Te6edf3embeddedTb4b4b4,
Te6edf3signatureTff7b72=Te6edf3signatureTb4b4b4,
Tb4b4b4)
Te6edf3backend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3backend_type Tff7b72= Tff7b72None
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3backendTb4b4b4, Tffa657dictTb4b4b4) Tff7b72and Te6edf3backendTb4b4b4:
Te6edf3backend_type Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffwasmTa5d6ff"
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4: Te6edf3declaredTb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_endpointsTa5d6ff"Tb4b4b4: Te6edf3endpointsTb4b4b4,
Ta5d6ff"Ta5d6ffrequires_network_fetchTa5d6ff"Tb4b4b4: Te6edf3requires_network_fetchTb4b4b4(Te6edf3manifestTb4b4b4, Te6edf3endpointsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffnetwork_modeTa5d6ff"Tb4b4b4: Te6edf3network_modeTb4b4b4,
Ta5d6ff"Ta5d6ffhas_frontendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffhas_backendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffbackend_typeTa5d6ff"Tb4b4b4: Te6edf3backend_typeTb4b4b4,
Ta5d6ff"Ta5d6ffmanifestTa5d6ff"Tb4b4b4: Te6edf3manifestTb4b4b4,
Ta5d6ff"Ta5d6ffsignatureTa5d6ff"Tb4b4b4: Te6edf3signatureTff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsecurity_findingsTa5d6ff"Tb4b4b4: Tb4b4b4[Te6edf3itemTff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3item Tff7b72in Te6edf3assessmentTff7b72.Td2a8fffindingsTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffrisk_levelTa5d6ff"Tb4b4b4: Te6edf3assessmentTff7b72.Td2a8ffrisk_levelTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffpreview_from_zip_bytesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787tempfile
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3is_wasm_bytesTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffpreview_from_wasm_bytesTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3validate_zip_bytesTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_zip_signatureTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpTb4b4b4:
Te6edf3zip_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffplugin.zipTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3extract_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffextractTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3extract_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3plugin_root Tff7b72= Te6edf3safe_extract_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Te6edf3extract_dirTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_build_preview_from_directoryTb4b4b4(
Te6edf3plugin_rootTb4b4b4,
Te6edf3signature_overrideTff7b72=Te6edf3signatureTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffpreview_from_wasm_bytesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787tempfile
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4) Tff7b72> T79c0ff32 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasm bundle is too largeTa5d6ff"Tb4b4b4)
Te6edf3bundle Tff7b72= Te6edf3parse_wasm_bundleTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3validate_embedded_bundleTb4b4b4(Te6edf3bundleTb4b4b4)
Tff7b72if Tff7b72not Te6edf3bundleTff7b72.Td2a8ffmanifestTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasm bundle missing embedded plugin manifestTa5d6ff"Tb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_wasm_signatureTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)
Te6edf3embedded Tff7b72= Tb4b4b4{
Te6edf3pathTb4b4b4: Te6edf3contentTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72for Te6edf3pathTb4b4b4, Te6edf3content Tff7b72in Te6edf3bundleTff7b72.Td2a8fffilesTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpTb4b4b4:
Te6edf3write_wasm_bundleTb4b4b4(Te6edf3tmpTb4b4b4, Te6edf3bundleTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_build_preview_from_directoryTb4b4b4(
Te6edf3tmpTb4b4b4,
Te6edf3signature_overrideTff7b72=Te6edf3signatureTb4b4b4,
Te6edf3embeddedTff7b72=Te6edf3embeddedTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffinstall_from_directoryTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3source_dirTb4b4b4: Tffa657strTb4b4b4,
Te6edf3granted_permissionsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3signature_overrideTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3source_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin.json not foundTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Tff7b72selfTff7b72.Td2a8ff_validate_manifestTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)Tb4b4b4)
Te6edf3signature Tff7b72= Te6edf3signature_override Tff7b72or Te6edf3verify_dir_signatureTb4b4b4(Te6edf3source_dirTb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(Te6edf3signatureTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4)
Te6edf3require_valid_signatureTb4b4b4(Te6edf3signatureTb4b4b4)
Te6edf3plugin_id Tff7b72= Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]
Te6edf3declared Tff7b72= Te6edf3declared_permission_idsTb4b4b4(Te6edf3manifestTb4b4b4)
Te6edf3granted Tff7b72= Te6edf3normalize_granted_permissionsTb4b4b4(Te6edf3declaredTb4b4b4, Te6edf3granted_permissionsTb4b4b4)
Te6edf3target_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3plugin_idTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_remove_install_treeTb4b4b4(Te6edf3target_dirTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopytreeTb4b4b4(Te6edf3source_dirTb4b4b4, Te6edf3target_dirTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_normalize_install_tree_permissionsTb4b4b4(Te6edf3target_dirTb4b4b4)
Te6edf3integrity_hash Tff7b72= Te6edf3compute_dir_integrity_hashTb4b4b4(Te6edf3target_dirTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Tb4b4b4(
Te6edf3enabledTb4b4b4,
Te6edf3auto_disabled_reasonTb4b4b4,
Te6edf3_existing_grantedTb4b4b4,
Te6edf3_old_hashTb4b4b4,
Te6edf3_old_tamperedTb4b4b4,
Tb4b4b4) Tff7b72= Tff7b72selfTff7b72.Td2a8ff_read_plugin_stateTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3plugin_idTb4b4b4,
Te6edf3enabledTb4b4b4,
Te6edf3auto_disabled_reasonTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3grantedTb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3integrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffunloadTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3plugin_idTb4b4b4] Tff7b72= Te6edf3PluginRecordTb4b4b4(
Tffa657idTff7b72=Te6edf3plugin_idTb4b4b4,
Te6edf3versionTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3manifestTff7b72=Te6edf3manifestTb4b4b4,
Te6edf3enabledTff7b72=Te6edf3enabledTb4b4b4,
Te6edf3install_pathTff7b72=Te6edf3target_dirTb4b4b4,
Te6edf3auto_disabled_reasonTff7b72=Te6edf3auto_disabled_reasonTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3grantedTb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3integrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3signatureTff7b72=Te6edf3signatureTff7b72.Td2a8ffto_dictTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3plugin_idTb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffinstall_from_zip_bytesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3granted_permissionsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787tempfile
Tff7b72if Te6edf3is_wasm_bytesTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffinstall_from_wasm_bytesTb4b4b4(
Te6edf3payloadTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3granted_permissionsTb4b4b4,
Tb4b4b4)
Te6edf3validate_zip_bytesTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_zip_signatureTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)
Te6edf3require_valid_signatureTb4b4b4(Te6edf3signatureTb4b4b4)
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpTb4b4b4:
Te6edf3zip_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffplugin.zipTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3extract_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffextractTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3extract_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3plugin_root Tff7b72= Te6edf3safe_extract_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Te6edf3extract_dirTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffinstall_from_directoryTb4b4b4(
Te6edf3plugin_rootTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3granted_permissionsTb4b4b4,
Te6edf3signature_overrideTff7b72=Te6edf3signatureTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffinstall_from_wasm_bytesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3granted_permissionsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787tempfile
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4) Tff7b72> T79c0ff32 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasm bundle is too largeTa5d6ff"Tb4b4b4)
Te6edf3signature Tff7b72= Te6edf3enrich_signature_with_trustTb4b4b4(
Te6edf3verify_wasm_signatureTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_lookup_trustedTb4b4b4,
Tb4b4b4)
Te6edf3require_valid_signatureTb4b4b4(Te6edf3signatureTb4b4b4)
Te6edf3bundle Tff7b72= Te6edf3parse_wasm_bundleTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3validate_embedded_bundleTb4b4b4(Te6edf3bundleTb4b4b4)
Tff7b72if Tff7b72not Te6edf3bundleTff7b72.Td2a8ffmanifestTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasm bundle missing embedded plugin manifestTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpTb4b4b4:
Te6edf3write_wasm_bundleTb4b4b4(Te6edf3tmpTb4b4b4, Te6edf3bundleTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffinstall_from_directoryTb4b4b4(
Te6edf3tmpTb4b4b4,
Te6edf3granted_permissionsTff7b72=Te6edf3granted_permissionsTb4b4b4,
Te6edf3signature_overrideTff7b72=Te6edf3signatureTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffenableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_validate_plugin_runtimeTb4b4b4(Te6edf3recordTb4b4b4)
T8b949e# Never re-bless a tampered tree. Reinstall is required to refresh
T8b949e# the integrity hash after on-disk changes.
Tff7b72if Te6edf3recordTff7b72.Td2a8fftamperedTb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(
Ta5d6ff"Ta5d6ffplugin tree was tampered; reinstall the plugin to enable itTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3current_hash Tff7b72= Te6edf3compute_dir_integrity_hashTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Tff7b72if Te6edf3recordTff7b72.Td2a8ffintegrity_hash Tff7b72and Te6edf3current_hash Tff7b72!= Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4:
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72False
Te6edf3recordTff7b72.Td2a8fftampered Tff7b72= Tff7b72True
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Te6edf3INTEGRITY_TAMPER_MESSAGE
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3plugin_idTb4b4b4,
Tff7b72FalseTb4b4b4,
Te6edf3INTEGRITY_TAMPER_MESSAGETb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(
Ta5d6ff"Ta5d6ffplugin tree was tampered; reinstall the plugin to enable itTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4:
Te6edf3recordTff7b72.Td2a8ffintegrity_hash Tff7b72= Te6edf3current_hash
Te6edf3recordTff7b72.Td2a8fftampered Tff7b72= Tff7b72False
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72True
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Tff7b72None
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72= T79c0ff0
Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3plugin_idTb4b4b4,
Tff7b72TrueTb4b4b4,
Tff7b72NoneTb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_backend_typeTb4b4b4(Te6edf3recordTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffactivateTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_entry_pathTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_hostTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_register_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ff_lookup_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3signer_hexTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tffa657boolTb4b4b4]Tb4b4b4:
Tff7b72return Te6edf3lookup_trusted_publisher_in_storageTb4b4b4(
Te6edf3signer_hexTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fflist_trusted_publishersTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72return Te6edf3list_trusted_publishersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4)
Tff7b72def Td2a8ffadd_trusted_publisherTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3identityTb4b4b4: Tffa657strTb4b4b4,
Te6edf3nameTb4b4b4: Tffa657str Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3add_user_trusted_publisherTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4, Te6edf3identityTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8fflist_trusted_publishersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffremove_trusted_publisherTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identityTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3remove_user_trusted_publisherTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4, Te6edf3identityTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8fflist_trusted_publishersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftrusted_publishers_tamperedTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657boolTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72return Te6edf3user_trusted_publishers_tamperedTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdisableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72False
Tff7b72if Te6edf3reasonTb4b4b4:
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Te6edf3reason
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3plugin_idTb4b4b4,
Tff7b72FalseTb4b4b4,
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reasonTb4b4b4,
Te6edf3tamperedTff7b72=Te6edf3recordTff7b72.Td2a8fftamperedTb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffunloadTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_unregister_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72if Te6edf3reasonTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_broadcast_plugin_eventTb4b4b4(
Te6edf3plugin_idTb4b4b4,
Ta5d6ff"Ta5d6ffplugin.disabledTa5d6ff"Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffreasonTa5d6ff"Tb4b4b4: Te6edf3reasonTb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ffremoveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffpopTb4b4b4(Te6edf3plugin_idTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3recordTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_unregister_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffunloadTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3target_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3plugin_idTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3target_dirTb4b4b4)
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffDELETE FROM plugin_state WHERE plugin_id = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffDELETE FROM plugin_storage WHERE plugin_id = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_verify_integrity_on_loadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3recordTff7b72.Td2a8ffintegrity_hash Tff7b72= Te6edf3compute_dir_integrity_hashTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4,
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reasonTb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tff7b72True
Te6edf3okTb4b4b4, Te6edf3_current Tff7b72= Te6edf3verify_dir_integrityTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4)
Tff7b72if Te6edf3okTb4b4b4:
Tff7b72return Tff7b72True
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72False
Te6edf3recordTff7b72.Td2a8fftampered Tff7b72= Tff7b72True
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Te6edf3INTEGRITY_TAMPER_MESSAGE
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Tff7b72FalseTb4b4b4,
Te6edf3INTEGRITY_TAMPER_MESSAGETb4b4b4,
Te6edf3integrity_hashTff7b72=Te6edf3recordTff7b72.Td2a8ffintegrity_hashTb4b4b4,
Te6edf3tamperedTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72True
Tf0883e@staticmethod
Tff7b72def Td2a8ff_backend_typeTb4b4b4(Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3backendTb4b4b4, Tffa657dictTb4b4b4) Tff7b72or Tff7b72not Te6edf3backendTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tffa657strTb4b4b4(Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffwasmTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_python_entry_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3entry Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpython backend entry is missingTa5d6ff"Tb4b4b4)
Te6edf3normalized Tff7b72= Te6edf3normalize_asset_pathTb4b4b4(Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3normalizedTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3path Tff7b72!= Te6edf3root Tff7b72and Tff7b72not Te6edf3pathTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3root Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffpython backend entry escapes install treeTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpython backend entry not foundTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3path
Tff7b72def Td2a8ff_python_hostTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Te6edf3PluginPythonHostTb4b4b4:
Tff7b72return Te6edf3PluginPythonHostTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Te6edf3logTff7b72=Tff7b72lambda Te6edf3messageTb4b4b4: Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[plugin:Tffd700{Te6edf3recordTff7b72.Td2a8ffidTffd700}Ta5d6ff] Tffd700{Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3call_managerTff7b72=Tff7b72lambda Te6edf3capabilityTb4b4b4, Te6edf3argsTb4b4b4: Tff7b72selfTff7b72.Td2a8ffcall_managerTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Te6edf3capabilityTb4b4b4,
Te6edf3argsTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3storage_getTff7b72=Tff7b72lambda Te6edf3keyTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstorage_getTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4,
Te6edf3storage_setTff7b72=Tff7b72lambda Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstorage_setTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4,
Te6edf3network_fetch_allowedTff7b72=Tff7b72lambdaTb4b4b4: Tff7b72selfTff7b72.Td2a8ffnetwork_fetch_allowedTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffasset_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3asset_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3normalized Tff7b72= Te6edf3normalize_asset_pathTb4b4b4(Te6edf3asset_nameTb4b4b4)
Te6edf3root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3normalizedTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3path Tff7b72!= Te6edf3root Tff7b72and Tff7b72not Te6edf3pathTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3root Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid asset pathTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149FileNotFoundErrorTb4b4b4(Te6edf3asset_nameTb4b4b4)
Tff7b72return Te6edf3path
Tff7b72def Td2a8fflocale_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3localeTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3i18n Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffi18nTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3directory Tff7b72= Te6edf3i18nTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdirectoryTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6fflocalesTa5d6ff"
Te6edf3default_locale Tff7b72= Te6edf3i18nTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdefaultLocaleTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3candidates Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3code Tff7b72in Tb4b4b4(Te6edf3localeTb4b4b4, Te6edf3default_localeTb4b4b4, Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3code Tff7b72and Te6edf3code Tff7b72not Tff7b72in Te6edf3candidatesTb4b4b4:
Te6edf3candidatesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3codeTb4b4b4)
Tff7b72for Te6edf3code Tff7b72in Te6edf3candidatesTb4b4b4:
Te6edf3relative Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3directoryTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3codeTffd700}Ta5d6ff.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3relativeTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3path
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffload_locale_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3localeTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8fflocale_pathTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3localeTb4b4b4)
Tff7b72if Tff7b72not Te6edf3pathTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin locale file must be an objectTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3data
Tff7b72def Td2a8ffreport_failureTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3reasonTb4b4b4: Tffa657strTb4b4b4,
Te6edf3sourceTb4b4b4: Tffa657str Tff7b72= Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(
Te6edf3recordTb4b4b4,
Ta5d6fffTa5d6ff"Tffd700{Te6edf3sourceTffd700}Ta5d6ff: Tffd700{Te6edf3reasonTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3auto_disableTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_require_pluginTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Te6edf3PluginRecordTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffplugin not found: Tffd700{Te6edf3plugin_idTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3record
Tff7b72def Td2a8ff_permission_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4, Te6edf3capabilityTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3managers Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmanagersTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3capability Tff7b72not Tff7b72in Te6edf3managersTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3granted_allows_managerTb4b4b4(Te6edf3recordTff7b72.Td2a8ffgranted_permissionsTb4b4b4, Te6edf3capabilityTb4b4b4)
Tff7b72def Td2a8ff_hook_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4, Te6edf3hookTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3hooks Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3hook Tff7b72not Tff7b72in Te6edf3hooksTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3granted_allows_hookTb4b4b4(Te6edf3recordTff7b72.Td2a8ffgranted_permissionsTb4b4b4, Te6edf3hookTb4b4b4)
Tff7b72def Td2a8ff_network_fetch_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3network Tff7b72= Te6edf3normalize_network_modeTb4b4b4(Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnetworkTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3network Tff7b72!= Ta5d6ff"Ta5d6fffetchTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3granted_allows_network_fetchTb4b4b4(Te6edf3recordTff7b72.Td2a8ffgranted_permissionsTb4b4b4)
Tff7b72def Td2a8ff_storage_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3storage Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Te6edf3storage Tff7b72!= Ta5d6ff"Ta5d6ffisolatedTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Te6edf3granted_allows_storageTb4b4b4(Te6edf3recordTff7b72.Td2a8ffgranted_permissionsTb4b4b4)
Tff7b72def Td2a8ffstorage_getTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3keyTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_storage_allowedTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffstorage permission not grantedTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3row Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT storage_value FROM plugin_storage WHERE plugin_id = ? AND storage_key = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72if Te6edf3row Tff7b72else Tff7b72None
Tff7b72def Td2a8ffstorage_setTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3keyTb4b4b4: Tffa657strTb4b4b4, Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_storage_allowedTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffstorage permission not grantedTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
INSERT INTO plugin_storage (plugin_id, storage_key, storage_value)
VALUES (?, ?, ?)
ON CONFLICT(plugin_id, storage_key) DO UPDATE SET storage_value = excluded.storage_value
"""Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffnetwork_fetch_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_network_fetch_allowedTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ffcall_managerTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3capabilityTb4b4b4: Tffa657strTb4b4b4,
Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin is disabledTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_permission_allowedTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3capabilityTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffcapability not granted: Tffd700{Te6edf3capabilityTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffdestinationPath.readTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_destination_path_readTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffdebugLog.readTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_debug_log_readTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.statusTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.listCollectorsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6fflist_collectorsTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.listReportsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6fflist_reportsTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.deleteReportTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffdelete_reportTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.clearReportsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffclear_reportsTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.previewTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffpreview_reportTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.sendTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffsend_reportTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.startCollectorTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffstart_collectorTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.stopCollectorTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffstop_collectorTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.announceTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffannounceTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffbugReport.setCollectorNameTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bug_report_callTb4b4b4(Ta5d6ff"Ta5d6ffset_collector_nameTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffrnsLink.openTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rns_link_openTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffrnsLink.identifyTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rns_link_identifyTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffrnsLink.requestTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rns_link_requestTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffrnsLink.sendTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rns_link_sendTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffrnsLink.closeTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rns_link_closeTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown capability: Tffd700{Te6edf3capabilityTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_require_bug_report_managerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffapp is not availableTa5d6ff"Tb4b4b4)
Te6edf3manager Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffbug_report_managerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3manager Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787bug_report_manager Tff7b72import Te6edf3BugReportManager
Te6edf3manager Tff7b72= Te6edf3BugReportManagerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffbug_report_manager Tff7b72= Te6edf3manager
Tff7b72return Te6edf3manager
Tff7b72def Td2a8ff_debug_log_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_bug_report_managerTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3managerTff7b72.Td2a8ffread_debug_logsTb4b4b4(
Te6edf3limitTff7b72=Tffa657intTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff200Tb4b4b4)Tb4b4b4,
Te6edf3searchTff7b72=Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsearchTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3levelTff7b72=Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflevelTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3moduleTff7b72=Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmoduleTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_bug_report_callTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3methodTb4b4b4: Tffa657strTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_bug_report_managerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffstatusTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffstatusTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6fflist_collectorsTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8fflist_collectorsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6fflist_reportsTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8fflist_reportsTb4b4b4(Te6edf3limitTff7b72=Tffa657intTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff20Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffdelete_reportTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffdelete_reportTb4b4b4(Tffa657intTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffindexTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffclear_reportsTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffclear_reportsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffpreview_reportTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffpreview_reportTb4b4b4(Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffsend_reportTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffsend_reportTb4b4b4(Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffstart_collectorTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffstart_collectorTb4b4b4(Te6edf3announceTff7b72=Tffa657boolTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffannounceTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffstop_collectorTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffstop_collectorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffannounceTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffannounceTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffset_collector_nameTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3managerTff7b72.Td2a8ffset_collector_nameTb4b4b4(Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown bug report method: Tffd700{Te6edf3methodTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_require_rns_link_managerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffapp is not availableTa5d6ff"Tb4b4b4)
Te6edf3manager Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffrns_link_managerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3manager Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffrns_link_manager is not availableTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3manager
Tf0883e@staticmethod
Tff7b72def Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657bytesTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3dest_hex Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Te6edf3aspect Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dest_hexTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3dest_hexTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hash is requiredTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3aspectTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3aspectTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffaspect is requiredTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72return Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3dest_hexTb4b4b4)Tb4b4b4, Te6edf3aspect
Tff7b72except Tf85149ValueError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid destination_hashTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72def Td2a8ff_await_rns_link_coroTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3coroTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3timeoutTb4b4b4: Tffa657float Tff7b72= T79c0ff45.0Tb4b4b4)Tb4b4b4:
Tff7b72import T7ee787asyncio
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787async_utils Tff7b72import Te6edf3AsyncUtils
Te6edf3loop Tff7b72= Te6edf3AsyncUtilsTff7b72.Td2a8ffmain_loop
Tff7b72if Te6edf3loop Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3loopTff7b72.Td2a8ffis_runningTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3asyncioTff7b72.Td2a8ffrun_coroutine_threadsafeTb4b4b4(Te6edf3coroTb4b4b4, Te6edf3loopTb4b4b4)Tff7b72.Td2a8ffresultTb4b4b4(Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3asyncioTff7b72.Td2a8ffget_running_loopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149RuntimeErrorTb4b4b4:
Tff7b72return Te6edf3asyncioTff7b72.Td2a8ffrunTb4b4b4(Te6edf3coroTb4b4b4)
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffevent loop is not availableTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_rns_link_openTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3dest_hashTb4b4b4, Te6edf3aspect Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4)
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_rns_link_managerTb4b4b4(Tb4b4b4)
Te6edf3auto_identify Tff7b72= Tffa657boolTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffauto_identifyTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4)
Te6edf3linkTb4b4b4, Te6edf3identifiedTb4b4b4, Te6edf3failure_reason Tff7b72= Tff7b72selfTff7b72.Td2a8ff_await_rns_link_coroTb4b4b4(
Te6edf3managerTff7b72.Td2a8ffopen_linkTb4b4b4(
Te6edf3dest_hashTb4b4b4,
Te6edf3aspectTb4b4b4,
Te6edf3auto_identifyTff7b72=Te6edf3auto_identifyTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3link Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Te6edf3failure_reason Tff7b72or Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffidentifiedTa5d6ff"Tb4b4b4: Te6edf3identifiedTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_rns_link_identifyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3dest_hashTb4b4b4, Te6edf3aspect Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4)
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_rns_link_managerTb4b4b4(Tb4b4b4)
Te6edf3okTb4b4b4, Te6edf3failure_reason Tff7b72= Te6edf3managerTff7b72.Td2a8ffidentifyTb4b4b4(Te6edf3dest_hashTb4b4b4, Te6edf3aspectTb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Te6edf3okTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Te6edf3failure_reasonTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_rns_link_requestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787base64
Te6edf3dest_hashTb4b4b4, Te6edf3aspect Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4)
Te6edf3path Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3pathTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3pathTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpath is requiredTa5d6ff"Tb4b4b4)
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_rns_link_managerTb4b4b4(Tb4b4b4)
Te6edf3linkTb4b4b4, Te6edf3_identifiedTb4b4b4, Te6edf3failure_reason Tff7b72= Tff7b72selfTff7b72.Td2a8ff_await_rns_link_coroTb4b4b4(
Te6edf3managerTff7b72.Td2a8ffopen_linkTb4b4b4(Te6edf3dest_hashTb4b4b4, Te6edf3aspectTb4b4b4, Te6edf3auto_identifyTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Te6edf3link Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Te6edf3failure_reason Tff7b72or Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Te6edf3data_b64 Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdata_b64Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3body_bytes Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64decodeTb4b4b4(Te6edf3data_b64Tb4b4b4, Te6edf3validateTff7b72=Tff7b72TrueTb4b4b4) Tff7b72if Te6edf3data_b64 Tff7b72else Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid data_b64Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3body_bytes Tff7b72is Tff7b72None Tff7b72or Tffa657lenTb4b4b4(Te6edf3body_bytesTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3link_request_data Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787RNST7ee787.T7ee787vendor Tff7b72import Te6edf3umsgpack
Tff7b72tryTb4b4b4:
Te6edf3link_request_data Tff7b72= Te6edf3umsgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3body_bytesTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffdata_msgpack_decode_failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3timeout Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimeoutTa5d6ff"Tb4b4b4)
Te6edf3done Tff7b72= Te6edf3threadingTff7b72.Td2a8ffEventTb4b4b4(Tb4b4b4)
Te6edf3resultTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffon_responseTb4b4b4(Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Tff7b72from T7ee787RNST7ee787.T7ee787vendor Tff7b72import Te6edf3umsgpack
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3rawTb4b4b4, Ta5d6ff"Ta5d6ffreadTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3rawTb4b4b4, Tb4b4b4(Tffa657bytesTb4b4b4, Tffa657bytearrayTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3raw_to_pack Tff7b72= Te6edf3rawTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3raw_to_pack Tff7b72= Te6edf3raw
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffbody_b64Ta5d6ff"Tb4b4b4] Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb64encodeTb4b4b4(
Te6edf3umsgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3raw_to_packTb4b4b4)Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffasciiTa5d6ff"Tb4b4b4)
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffresponse_encode_failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"
Te6edf3doneTff7b72.Td2a8ffsetTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffon_failedTb4b4b4(Te6edf3_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffrequest_failedTa5d6ff"
Te6edf3doneTff7b72.Td2a8ffsetTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffon_progressTb4b4b4(Te6edf3_receiptTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Te6edf3managerTff7b72.Td2a8ffrequestTb4b4b4(
Te6edf3dest_hashTb4b4b4,
Te6edf3aspectTb4b4b4,
Te6edf3pathTb4b4b4,
Te6edf3link_request_dataTb4b4b4,
Te6edf3response_callbackTff7b72=Te6edf3on_responseTb4b4b4,
Te6edf3failed_callbackTff7b72=Te6edf3on_failedTb4b4b4,
Te6edf3progress_callbackTff7b72=Te6edf3on_progressTb4b4b4,
Te6edf3timeoutTff7b72=Te6edf3timeoutTb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffrequest_dispatch_failed: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Te6edf3wait_timeout Tff7b72= Tffa657floatTb4b4b4(Te6edf3timeoutTb4b4b4) Tff7b72if Te6edf3timeout Tff7b72is Tff7b72not Tff7b72None Tff7b72else T79c0ff30.0
Tff7b72if Tff7b72not Te6edf3doneTff7b72.Td2a8ffwaitTb4b4b4(Te6edf3timeoutTff7b72=Tffa657maxTb4b4b4(Te6edf3wait_timeoutTb4b4b4, T79c0ff1.0Tb4b4b4) Tff7b72+ T79c0ff5.0Tb4b4b4)Tb4b4b4:
Te6edf3resultTb4b4b4[Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffrequest_timeoutTa5d6ff"
Tff7b72return Te6edf3result
Tff7b72def Td2a8ff_rns_link_sendTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787base64
Te6edf3dest_hashTb4b4b4, Te6edf3aspect Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4)
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_rns_link_managerTb4b4b4(Tb4b4b4)
Te6edf3payload_b64 Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpayload_b64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3payload Tff7b72= Tb4b4b4(
Te6edf3base64Tff7b72.Td2a8ffb64decodeTb4b4b4(Te6edf3payload_b64Tb4b4b4, Te6edf3validateTff7b72=Tff7b72TrueTb4b4b4) Tff7b72if Te6edf3payload_b64 Tff7b72else Ta5d6ffbTa5d6ff"Ta5d6ff"
Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid payload_b64Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3okTb4b4b4, Te6edf3failure_reason Tff7b72= Te6edf3managerTff7b72.Td2a8ffsend_packetTb4b4b4(Te6edf3dest_hashTb4b4b4, Te6edf3aspectTb4b4b4, Te6edf3payloadTb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Te6edf3okTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Te6edf3failure_reasonTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ff_rns_link_closeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3dest_hashTb4b4b4, Te6edf3aspect Tff7b72= Tff7b72selfTff7b72.Td2a8ff_parse_rns_link_argsTb4b4b4(Te6edf3argsTb4b4b4)
Te6edf3manager Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_rns_link_managerTb4b4b4(Tb4b4b4)
Te6edf3ok Tff7b72= Te6edf3managerTff7b72.Td2a8ffcloseTb4b4b4(Te6edf3dest_hashTb4b4b4, Te6edf3aspectTb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Te6edf3okTb4b4b4,
Ta5d6ff"Ta5d6fffailure_reasonTa5d6ff"Tb4b4b4: Tff7b72None Tff7b72if Te6edf3ok Tff7b72else Ta5d6ff"Ta5d6ffno_active_linkTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3dest_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffon_rns_link_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3event_payload Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffeventTa5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffeventTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffpayload_b64Ta5d6ff"Tb4b4b4: Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpayload_b64Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3record Tff7b72in Tffa657listTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72and Tff7b72selfTff7b72.Td2a8ff_hook_allowedTb4b4b4(Te6edf3recordTb4b4b4, Ta5d6ff"Ta5d6ffrns.link.eventTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdispatch_hookTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Ta5d6ff"Ta5d6ffrns.link.eventTa5d6ff"Tb4b4b4, Te6edf3event_payloadTb4b4b4)
Tff7b72def Td2a8ff_destination_path_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffapp Tff7b72or Tff7b72not Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffreticulumTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4, Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4, Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4}
Te6edf3search Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsearchTa5d6ff"Tb4b4b4)
Te6edf3limit Tff7b72= Tffa657intTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff200Tb4b4b4)
Te6edf3handler Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffrnpath_handlerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3handlerTb4b4b4:
Te6edf3result Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_path_tableTb4b4b4(
Te6edf3searchTff7b72=Tffa657strTb4b4b4(Te6edf3searchTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3search Tff7b72else Tff7b72NoneTb4b4b4,
Te6edf3limitTff7b72=Te6edf3limitTb4b4b4,
Tb4b4b4)
Te6edf3paths Tff7b72= Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffviaTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffviaTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffinterfaceTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterfaceTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftableTa5d6ff"Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)
Tb4b4b4]
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Te6edf3pathsTb4b4b4,
Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3pathsTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3destination_hash Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Te6edf3pathsTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3reticulum Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffreticulum
Tff7b72if Te6edf3destination_hashTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Te6edf3destination_hashTb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3table Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_path_tableTb4b4b4(Tb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4[
Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tff7b72for Te6edf3entry Tff7b72in Te6edf3table
Tff7b72if Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tb4b4b4]
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3item Tff7b72in Te6edf3hashesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3itemTb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3raw Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3itemTb4b4b4) Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3itemTb4b4b4, Tffa657strTb4b4b4) Tff7b72else Te6edf3item
Te6edf3hops Tff7b72= Tb4b4b4(
Te6edf3reticulumTff7b72.Td2a8ffget_hops_toTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3reticulumTb4b4b4, Ta5d6ff"Ta5d6ffget_hops_toTa5d6ff"Tb4b4b4)
Tff7b72else Tff7b72None
Tb4b4b4)
Te6edf3pathsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Te6edf3hopsTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4}Tb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Te6edf3pathsTb4b4b4,
Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: Tffa657lenTb4b4b4(Te6edf3pathsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffinvokeTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3methodTb4b4b4: Tffa657strTb4b4b4,
Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin is disabledTa5d6ff"Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffcallManagerTa5d6ff"Tb4b4b4:
Te6edf3capability Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcapabilityTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3capabilityTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3capabilityTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffcapability is requiredTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffcall_managerTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3capabilityTb4b4b4, Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffreadPathsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffcall_managerTb4b4b4(Te6edf3plugin_idTb4b4b4, Ta5d6ff"Ta5d6ffdestinationPath.readTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3backendTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown method: Tffd700{Te6edf3methodTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3backend_type Tff7b72= Tff7b72selfTff7b72.Td2a8ff_backend_typeTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72if Te6edf3backend_type Tff7b72== Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffinvokeTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_entry_pathTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Te6edf3methodTb4b4b4,
Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_hostTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_invoke_wasmTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3methodTb4b4b4, Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3excTb4b4b4, Te6edf3auto_disableTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72raise
Tff7b72def Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTb4b4b4[Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4]
Te6edf3entry Tff7b72= Te6edf3backendTb4b4b4[Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffbackend wasm entry missingTa5d6ff"Tb4b4b4)
Te6edf3normalized Tff7b72= Te6edf3normalize_asset_pathTb4b4b4(Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Te6edf3wasm_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3normalizedTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3wasm_path Tff7b72!= Te6edf3root Tff7b72and Tff7b72not Te6edf3wasm_pathTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3root Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffbackend wasm entry escapes install treeTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3wasm_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_ensure_minimal_wasmTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3validate_wasm_fileTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3wasm_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Tff7b72if Te6edf3handleTff7b72.Td2a8ffreadTb4b4b4(T79c0ff4Tb4b4b4) Tff7b72!= Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ffasmTa5d6ff"Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid wasm moduleTa5d6ff"Tb4b4b4)
Tff7b72except Tb4b4b4(Te6edf3PluginSecurityErrorTb4b4b4, Tf85149OSErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3parent Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72if Te6edf3parent Tff7b72and Te6edf3is_path_within_dirTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3rootTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3wasm_pathTb4b4b4) Tff7b72and Te6edf3is_path_within_dirTb4b4b4(Te6edf3wasm_pathTb4b4b4, Te6edf3rootTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_ensure_minimal_wasmTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72return Te6edf3wasm_path
Tff7b72def Td2a8ff_invoke_wasmTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4,
Te6edf3methodTb4b4b4: Tffa657strTb4b4b4,
Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3wasm_path Tff7b72= Tff7b72selfTff7b72.Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3engine Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffEngineTb4b4b4(Tb4b4b4)
Te6edf3module Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffModuleTff7b72.Td2a8fffrom_fileTb4b4b4(Te6edf3engineTb4b4b4, Te6edf3wasm_pathTb4b4b4)
Te6edf3store Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffStoreTb4b4b4(Te6edf3engineTb4b4b4)
Te6edf3storeTff7b72.Td2a8ffset_fuelTb4b4b4(T79c0ff1_000_000Tb4b4b4)
Te6edf3linker Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffLinkerTb4b4b4(Te6edf3engineTb4b4b4)
Te6edf3logsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffhost_logTb4b4b4(Te6edf3callerTb4b4b4, Te6edf3ptrTb4b4b4, Te6edf3lengthTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3memory Tff7b72= Te6edf3callerTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3memory Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3data Tff7b72= Te6edf3memoryTff7b72.Td2a8ffreadTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3ptrTb4b4b4, Te6edf3ptr Tff7b72+ Te6edf3lengthTb4b4b4)
Te6edf3logsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linkerTff7b72.Td2a8ffdefine_funcTb4b4b4(
Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflogTa5d6ff"Tb4b4b4,
Te6edf3wasmtimeTff7b72.Td2a8ffFuncTypeTb4b4b4(Tb4b4b4[Te6edf3wasmtimeTff7b72.Td2a8ffValTypeTff7b72.Td2a8ffi32Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3wasmtimeTff7b72.Td2a8ffValTypeTff7b72.Td2a8ffi32Tb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3host_logTb4b4b4,
Tb4b4b4)
Te6edf3instance Tff7b72= Te6edf3linkerTff7b72.Td2a8ffinstantiateTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3moduleTb4b4b4)
Te6edf3payload Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3methodTb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Te6edf3argsTb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3validate_invoke_payloadTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3exports Tff7b72= Te6edf3castTb4b4b4(Ta5d6ff"Ta5d6ffAnyTa5d6ff"Tb4b4b4, Te6edf3instanceTff7b72.Td2a8ffexportsTb4b4b4(Te6edf3storeTb4b4b4)Tb4b4b4)
Te6edf3memory Tff7b72= Te6edf3exportsTb4b4b4[Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Tb4b4b4]
Te6edf3alloc Tff7b72= Te6edf3exportsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffallocTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3allocTb4b4b4:
Te6edf3ptr Tff7b72= Te6edf3allocTb4b4b4(Te6edf3storeTb4b4b4, Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ptr Tff7b72= T79c0ff0
Tff7b72if Te6edf3memoryTff7b72.Td2a8ffdata_lenTb4b4b4(Te6edf3storeTb4b4b4) Tff7b72< Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Te6edf3memoryTff7b72.Td2a8ffgrowTb4b4b4(
Te6edf3storeTb4b4b4,
Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4) Tff7b72- Te6edf3memoryTff7b72.Td2a8ffdata_lenTb4b4b4(Te6edf3storeTb4b4b4) Tff7b72+ T79c0ff65535Tb4b4b4) Tff7b72/Tff7b72/ T79c0ff65536Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3data Tff7b72= Te6edf3memoryTff7b72.Td2a8ffdata_ptrTb4b4b4(Te6edf3storeTb4b4b4)
Te6edf3dataTb4b4b4[Te6edf3ptr Tb4b4b4: Te6edf3ptr Tff7b72+ Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4] Tff7b72= Te6edf3payload
Te6edf3invoke Tff7b72= Te6edf3exportsTb4b4b4[Ta5d6ff"Ta5d6ffinvokeTa5d6ff"Tb4b4b4]
Te6edf3invokeTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3ptrTb4b4b4, Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6fflogsTa5d6ff"Tb4b4b4: Te6edf3logsTb4b4b4}
Tff7b72def Td2a8ff_ensure_minimal_wasmTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3wasm_bytes Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffwat2wasmTb4b4b4(Te6edf3MINIMAL_PLUGIN_WATTb4b4b4)
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTb4b4b4[Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4]
Te6edf3entry Tff7b72= Te6edf3backendTb4b4b4[Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffbackend wasm entry missingTa5d6ff"Tb4b4b4)
Te6edf3normalized Tff7b72= Te6edf3normalize_asset_pathTb4b4b4(Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4)
Te6edf3wasm_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffrealpathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3normalizedTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3wasm_path Tff7b72!= Te6edf3root Tff7b72and Tff7b72not Te6edf3wasm_pathTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3root Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffbackend wasm entry escapes install treeTa5d6ff"Tb4b4b4)
Te6edf3parent Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72if Te6edf3parentTb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3wasm_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3wasm_bytesTb4b4b4)
Tff7b72return Te6edf3wasm_path
Tff7b72def Td2a8ffdispatch_hookTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3hookTb4b4b4: Tffa657strTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3record Tff7b72or Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_hook_allowedTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3hookTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3backend_type Tff7b72= Tff7b72selfTff7b72.Td2a8ff_backend_typeTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72if Te6edf3backend_type Tff7b72== Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_python_runtimeTff7b72.Td2a8ffon_hookTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_entry_pathTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Te6edf3hookTb4b4b4,
Te6edf3payloadTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_python_hostTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_invoke_wasmTb4b4b4(
Te6edf3recordTb4b4b4,
Ta5d6ff"Ta5d6ffon_hookTa5d6ff"Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffhookTa5d6ff"Tb4b4b4: Te6edf3hookTb4b4b4, Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4: Te6edf3payloadTb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_broadcast_plugin_eventTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3hookTb4b4b4, Te6edf3payloadTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3excTb4b4b4, Te6edf3auto_disableTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_validate_plugin_runtimeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifest
Te6edf3frontend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3frontendTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3frontendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin frontend entry is missingTa5d6ff"Tb4b4b4)
Te6edf3frontend_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_pathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3entryTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3frontend_pathTb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin frontend entry is emptyTa5d6ff"Tb4b4b4)
Te6edf3backend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3backendTb4b4b4:
Tff7b72return
Te6edf3entry Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin backend entry is missingTa5d6ff"Tb4b4b4)
Te6edf3backend_type Tff7b72= Tff7b72selfTff7b72.Td2a8ff_backend_typeTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72if Te6edf3backend_type Tff7b72== Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4:
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8ff_python_entry_pathTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3size Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72if Te6edf3size Tff7b72<Tff7b72= T79c0ff0 Tff7b72or Te6edf3size Tff7b72> T79c0ff1_000_000Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpython backend entry size rejectedTa5d6ff"Tb4b4b4)
Tff7b72return
Te6edf3wasm_path Tff7b72= Tff7b72selfTff7b72.Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3engine Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffEngineTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3wasmtimeTff7b72.Td2a8ffModuleTff7b72.Td2a8fffrom_fileTb4b4b4(Te6edf3engineTb4b4b4, Te6edf3wasm_pathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffinvalid backend wasm module: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72def Td2a8ff_record_plugin_failureTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4,
Te6edf3excTb4b4b4: Tf85149Exception Tff7b72| Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3auto_disableTb4b4b4: Tffa657boolTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3should_disable Tff7b72= Tff7b72False
Te6edf3disable_reason Tff7b72= Tffa657strTb4b4b4(Te6edf3excTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72- Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72> Te6edf3PLUGIN_ERROR_WINDOW_SECONDSTb4b4b4:
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72= T79c0ff0
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72+Tff7b72= T79c0ff1
Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72= Te6edf3now
Tff7b72if Te6edf3auto_disable Tff7b72and Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72>Tff7b72= Te6edf3PLUGIN_ERROR_BUDGETTb4b4b4:
Te6edf3should_disable Tff7b72= Tff7b72True
Te6edf3disable_reason Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffAuto-disabled after Tffd700{Te6edf3recordTff7b72.Td2a8fferror_countTffd700}Ta5d6ff errors: Tffd700{Te6edf3disable_reasonTffd700}Ta5d6ff"
Tb4b4b4)
Tff7b72if Te6edf3should_disableTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3reasonTff7b72=Te6edf3disable_reasonTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffon_announce_receivedTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3aspectTb4b4b4: Tffa657strTb4b4b4,
Te6edf3destination_hashTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3announced_identityTb4b4b4: Te6edf3AnyTb4b4b4,
Te6edf3app_dataTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3announce_packet_hashTb4b4b4: Tffa657bytesTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3payload Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3destination_hashTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3app_dataTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3app_dataTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffannounce_packet_hashTa5d6ff"Tb4b4b4: Te6edf3announce_packet_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3announce_packet_hashTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3record Tff7b72in Tffa657listTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72and Tff7b72selfTff7b72.Td2a8ff_hook_allowedTb4b4b4(Te6edf3recordTb4b4b4, Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdispatch_hookTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"Tb4b4b4, Te6edf3payloadTb4b4b4)
Tff7b72def Td2a8ff_register_plugin_hooksTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Te6edf3hooks Tff7b72= Tb4b4b4(Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff" Tff7b72in Te6edf3hooks Tff7b72and Tff7b72not Tffa657getattrTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffappTb4b4b4,
Ta5d6ff"Ta5d6ff_plugin_announce_handler_registeredTa5d6ff"Tb4b4b4,
Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72import T7ee787RNS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787announce_handler Tff7b72import Te6edf3AnnounceHandler
Te6edf3handler Tff7b72= Te6edf3AnnounceHandlerTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.pluginTa5d6ff"Tb4b4b4,
Tff7b72lambda Te6edf3aspectTb4b4b4, Te6edf3dhTb4b4b4, Te6edf3aiTb4b4b4, Te6edf3adTb4b4b4, Te6edf3aphTb4b4b4: Tff7b72selfTff7b72.Td2a8ffon_announce_receivedTb4b4b4(
Te6edf3aspectTb4b4b4,
Te6edf3dhTb4b4b4,
Te6edf3aiTb4b4b4,
Te6edf3adTb4b4b4,
Te6edf3aphTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Te6edf3handlerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler_registered Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler Tff7b72= Te6edf3handler
Tff7b72def Td2a8ff_unregister_plugin_hooksTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Te6edf3any_enabled_hooks Tff7b72= Tffa657anyTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffenabled
Tff7b72and Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"
Tff7b72in Tb4b4b4(Tb4b4b4(Te6edf3pTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4)
Tff7b72for Te6edf3p Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72if Te6edf3any_enabled_hooksTb4b4b4:
Tff7b72return
Te6edf3handler Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ff_plugin_announce_handlerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tff7b72not Te6edf3handlerTb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787RNS
Tff7b72if Te6edf3handler Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffannounce_handlersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffannounce_handlersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3handlerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler_registered Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler Tff7b72= Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_broadcast_plugin_eventTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4,
Te6edf3eventTb4b4b4: Tffa657strTb4b4b4,
Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Tff7b72import T7ee787json Tff7b72as T7ee787json_module
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787async_utils Tff7b72import Te6edf3AsyncUtils
Te6edf3message Tff7b72= Te6edf3json_moduleTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffplugin.eventTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffplugin_idTa5d6ff"Tb4b4b4: Te6edf3plugin_idTb4b4b4,
Ta5d6ff"Ta5d6ffeventTa5d6ff"Tb4b4b4: Te6edf3eventTb4b4b4,
Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4: Te6edf3payloadTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffwebsocket_broadcastTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4)
Tf0883e@staticmethod
Tff7b72def Td2a8ff_chmod_pathTb4b4b4(Te6edf3pathTb4b4b4: Tffa657strTb4b4b4, Te6edf3modeTb4b4b4: Tffa657intTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffchmodTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3modeTb4b4b4)
Tff7b72except Tf85149OSErrorTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_normalize_install_tree_permissionsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rootTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Make installed trees deletable on Android/AssetFinder upgrades."""
Tff7b72for Te6edf3dirpathTb4b4b4, Te6edf3dirnamesTb4b4b4, Te6edf3filenames Tff7b72in Te6edf3osTff7b72.Td2a8ffwalkTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_chmod_pathTb4b4b4(Te6edf3dirpathTb4b4b4, T79c0ff0o755Tb4b4b4)
Tff7b72for Te6edf3name Tff7b72in Te6edf3dirnamesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_chmod_pathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dirpathTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4, T79c0ff0o755Tb4b4b4)
Tff7b72for Te6edf3name Tff7b72in Te6edf3filenamesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_chmod_pathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3dirpathTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4, T79c0ff0o644Tb4b4b4)
Tff7b72def Td2a8ff_remove_install_treeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3target_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Remove an install tree, fixing read-only modes copied from APK assets."""
Tff7b72def Td2a8ff_onerrorTb4b4b4(Te6edf3funcTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3_exc_infoTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_chmod_pathTb4b4b4(Te6edf3pathTb4b4b4, T79c0ff0o700 Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72else T79c0ff0o600Tb4b4b4)
Te6edf3parent Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72if Te6edf3parentTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_chmod_pathTb4b4b4(Te6edf3parentTb4b4b4, T79c0ff0o700Tb4b4b4)
Te6edf3funcTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_normalize_install_tree_permissionsTb4b4b4(Te6edf3target_dirTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3target_dirTb4b4b4, Te6edf3onerrorTff7b72=Te6edf3_onerrorTb4b4b4)
Tff7b72def Td2a8ff_bundled_needs_reinstallTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3source_dirTb4b4b4: Tffa657strTb4b4b4,
Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3plugin_id Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3plugin_idTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3plugin_idTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3existing Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Te6edf3existing Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Te6edf3existingTff7b72.Td2a8fftamperedTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Te6edf3existingTff7b72.Td2a8ffversion Tff7b72!= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Te6edf3target_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72tryTb4b4b4:
Te6edf3bundled_hash Tff7b72= Te6edf3compute_dir_integrity_hashTb4b4b4(Te6edf3source_dirTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Te6edf3existingTff7b72.Td2a8ffintegrity_hash Tff7b72and Te6edf3existingTff7b72.Td2a8ffintegrity_hash Tff7b72!= Te6edf3bundled_hashTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Tff7b72not Te6edf3existingTff7b72.Td2a8ffintegrity_hashTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3installed_hash Tff7b72= Te6edf3compute_dir_integrity_hashTb4b4b4(Te6edf3target_dirTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Te6edf3installed_hash Tff7b72!= Te6edf3bundled_hash
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffinstall_bundled_examplesTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3obsolete Tff7b72= Ta5d6ff"Ta5d6ffcom.meshchatx.mesh-observatoryTa5d6ff"
Tff7b72if Te6edf3obsolete Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3obsoleteTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Te6edf3bundled_root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpluginsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3bundled_rootTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72for Te6edf3name Tff7b72in Tffa657sortedTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3bundled_rootTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3source Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3bundled_rootTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3sourceTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffBundled plugin manifest read failed for Tffd700{Te6edf3nameTffd700}Ta5d6ff: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72continue
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3manifestTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_bundled_needs_reinstallTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3manifestTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_from_directoryTb4b4b4(Te6edf3sourceTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffBundled plugin sync failed for Tffd700{Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffidTa5d6ff'Tb4b4b4, Te6edf3nameTb4b4b4)Tffd700}Ta5d6ff: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3flushTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────